// https://www.acwing.com/problem/content/828/

#include <iostream>
#include <vector>

using namespace std;

/*
 * 这道题的主要意思是希望使用数组来模拟单链表的操作（如果使用链表需要反复 new 会导致超时）
 * 因此需要考虑如何使用数组表示链表的结点，以及结点跟结点之间的上下游关系等
 */

constexpr int ARRAY_MAX_SIZE = 100010;

// 存放每个结点对应的值，比如 values[i] 表示结点 i 对应的值
int values[ARRAY_MAX_SIZE];

// next[i] 存放的是 i 结点的下一个结点的位置
int ne[ARRAY_MAX_SIZE];

// 指针头，当前索引
int head, idx;


void init() {
    head = -1;
    idx = 0;
}

void push_front(int x) {
    values[idx] = x;
    ne[idx] = head;
    head = idx;
    idx++;
}

void insert(int k, int x) {
    // 1. 记录值
    values[idx] = x;
    // 2. 移动指针
    ne[idx] = ne[k];
    // 3. 插入位置
    ne[k] = idx;
    // 4. 增加下个结点的位置
    idx++;
}

void remove(int k) {
    ne[k] = ne[ne[k]];
}


int main() {
    int n;
    cin>>n;
    init();

    char ch;
    int x, k;
    while (n-->0) {
        cin>>ch;
        if (ch == 'H') {
            cin>>x;
            push_front(x);
        } else if (ch == 'I') {
            cin>>k>>x;
            insert(k-1, x);
        } else if (ch == 'D') {
            cin>>k;
            if (k == 0) {
                head = ne[head];
            } else  {
                remove(k - 1);
            }
        }
    }

    for (int i=head; i != -1; i = ne[i]) {
        cout<<values[i]<<" ";
    }
    cout<<endl;
    return 0;
}
